package com.utils;

import java.math.BigDecimal;
import java.util.Hashtable;

public class PhongThuyUtils {
	
	public static Hashtable<String, BigDecimal> nguHanhSinhKhac = null;
	public static Hashtable<String, BigDecimal> thienCanHopXung = null;
	public static Hashtable<String, BigDecimal> lucXungHop = null;
	public static Hashtable<String, BigDecimal> tamHop = null;
	public static final String[] TU_HANH_XUNG = {"TÝ NGỌ MÃO DẬU","THÌN TUẤT SỬU MÙI","DẦN THÂN TỴ HỢI"};
	public static final String[] CHI = { "TÝ", "SỬU", "DẦN", "MÃO", "THÌN", "TỴ", "NGỌ", "MÙI", "THÂN", "DẬU", "TUẤT", "HỢI" };
	public static final String[] CAN = {"GIÁP", "ẤT", "BÍNH", "ĐINH", "MẬU", "KỶ", "CANH", "TÂN", "NHÂM", "QUÝ"};
	public static final String[] MENH = {
		"Hải Trung Kim", "Lư trung hỏa", "Đại lâm mộc", "Lộ bàng thổ", "Kiếm phong kim", "Sơn đầu hỏa", "Giản hạ thủy", "Thành đầu thổ", "Bạch lạp kim", "Dương liễu mộc"
		, "Tuyền trung thủy", "Ốc thượng thổ", "Tích lịch hỏa", "Tùng bách mộc", "Trường lưu thủy", "Sa trung kim", "Sơn hạ hỏa", "Bình địa mộc", "Bích thượng thổ", "Kim Bạch Kim"
		, "Phúc đăng hỏa", "Thiên hà thủy", "Đại dịch thổ", "Thoa xuyến kim", "Tang đó mộc", "Đại khê thủy", "Sa trung thổ", "Thiên thượng hỏa", "Thạch lựu mộc", "Đại hải thủy"
	};
	public static Hashtable<String, String> CANCHI_MENH = null;
	
	static {
		int can10 = 0, chi12 = 0;
		CANCHI_MENH = new Hashtable<String, String>();
		for (int i = 0; i < 30; i++) {
			CANCHI_MENH.put(CAN[can10++] + CHI[chi12++], MENH[i]);
			if (can10 >= 10) can10 = 0;
			if (chi12 >= 12) chi12 = 0;
			CANCHI_MENH.put(CAN[can10++] + CHI[chi12++], MENH[i]);
			if (can10 >= 10) can10 = 0;
			if (chi12 >= 12) chi12 = 0;
		}
		
		BigDecimal mark00 = new BigDecimal("0");
		BigDecimal mark10 = new BigDecimal("1");
		BigDecimal mark20 = new BigDecimal("2");
		nguHanhSinhKhac = new Hashtable<String, BigDecimal>();
		// Ngu hanh SINH: 2 diem
		nguHanhSinhKhac.put("KIMTHỦY", mark20);
		nguHanhSinhKhac.put("THỦYMỘC", mark20);
		nguHanhSinhKhac.put("MỘCHỎA", mark20);
		nguHanhSinhKhac.put("HỎẤTHỔ", mark20);
		nguHanhSinhKhac.put("THỔKIM", mark20);
		// Ngu hanh KHAC: 0 diem
		nguHanhSinhKhac.put("KIMMỘC", mark00);
		nguHanhSinhKhac.put("MỘCTHỔ", mark00);
		nguHanhSinhKhac.put("THỔTHỦY", mark00);
		nguHanhSinhKhac.put("THỦYHỎA", mark00);
		nguHanhSinhKhac.put("HỎAKIM", mark00);
		
		thienCanHopXung = new Hashtable<String, BigDecimal>();
		// HOP: 1 Diem
		thienCanHopXung.put("GIÁPKỶ", mark10);
		thienCanHopXung.put("ẤTCANH", mark10);
		thienCanHopXung.put("BÍNHTÂN", mark10);
		thienCanHopXung.put("ĐINHNHÂM", mark10);
		thienCanHopXung.put("MẬUQUÝ", mark10);
		// XUNG: 0 Diem
		thienCanHopXung.put("GIÁPMẬU", mark00);
		thienCanHopXung.put("ẤTKỶ", mark00);
		thienCanHopXung.put("BÍNHCANH", mark00);
		thienCanHopXung.put("ĐINHTÂN", mark00);
		thienCanHopXung.put("MẬUNHÂM", mark00);
		thienCanHopXung.put("KỶQUÝ", mark00);
		thienCanHopXung.put("CANHGIÁP", mark00);
		thienCanHopXung.put("TÂNẤT", mark00);
		thienCanHopXung.put("NHÂMBÍNH", mark00);
		thienCanHopXung.put("QUÝĐINH", mark00);
		
		// LUC XUNG - HOP
		lucXungHop = new Hashtable<String, BigDecimal>();
		// LUC HOP: 2 Diem
		lucXungHop.put("TÝSỬU", mark20);
		lucXungHop.put("DẦNHỢI", mark20);
		lucXungHop.put("MÃOTUẤT", mark20);
		lucXungHop.put("THÌNDẬU", mark20);
		lucXungHop.put("TỴTHÂN", mark20);
		lucXungHop.put("NGỌMÙI", mark20);
		// LUC XUNG, HAI: 1 Diem
		lucXungHop.put("TÝMÙI", mark10);
		lucXungHop.put("SỬUNGỌ", mark10);
		lucXungHop.put("DẦNTỴ", mark10);
		lucXungHop.put("MÃOTHÌN", mark10);
		lucXungHop.put("HỢITHÂN", mark10);
		lucXungHop.put("TUẤTDẬU", mark10);
		lucXungHop.put("TÝNGỌ", mark10);
		lucXungHop.put("MÃODẬU", mark10);
		lucXungHop.put("DẦNTHÂN", mark10);
		lucXungHop.put("TỴHỢI", mark10);
		lucXungHop.put("THÌNTUAN", mark10);
		lucXungHop.put("SỬUMÙI", mark10);
		
		// TAM HOP
		tamHop = new Hashtable<String, BigDecimal>();
		// HỢIMÃOMÙI
		tamHop.put("HỢIMÃO", mark20);
		tamHop.put("HỢIMÙI", mark20);
		tamHop.put("MÃOMÙI", mark20);
		// TỴDẬUSỬU
		tamHop.put("TỴDẬU", mark20);
		tamHop.put("TỴSỬU", mark20);
		tamHop.put("DẬUSỬU", mark20);
		// THÂNTÝTHÌN
		tamHop.put("THÂNTÝ", mark20);
		tamHop.put("THÂNTHÌN", mark20);
		tamHop.put("TÝTHÌN", mark20);
		// DẦNNGỌTUẤT
		tamHop.put("DẦNNGỌ", mark20);
		tamHop.put("DẦNTUẤT", mark20);
		tamHop.put("NGỌTUẤT", mark20);

	}
	
	public static String getChi (int year) { return CHI[(year + 8) % 12]; }
	public static String getCan (int year) {return CAN[(year + 6) % 10];}
	
	public static String menhNguHanhLucThapHoaGiap(int nYear) {
		int num3;
		String str = "";
		int num = (nYear - 4) % 10;
		int num2 = (nYear - 4) % 12;
		if (num2 >= num) {
			num3 = num2 - num;
		} else {
			num3 = (num2 + 12) - num;
		}
		int num4 = num / 2;
		switch (num3) {
		case 0:
		case 6:
			if (num4 != 0) {
				switch (num4) {
				case 1:
					return "HỎA";

				case 2:
					return "MỘC";

				case 3:
					return "THỔ";

				case 4:
					str = "KIM";
					break;
				}
				return str;
			}
			return "KIM";

		case 1:
		case 3:
		case 5:
		case 7:
		case 9:
			return str;

		case 2:
		case 8:
			switch (num4) {
			case 0:
				return "THỦY";

			case 1:
				return "THỔ";

			case 2:
				return "HỎA";

			case 3:
				return "MỘC";

			case 4:
				str = "THỦY";
				break;
			}
			return str;

		case 4:
		case 10:
			switch (num4) {
			case 0:
				return "HỎA";

			case 1:
				return "THỦY";

			case 2:
				return "THỔ";

			case 3:
				return "KIM";

			case 4:
				str = "MỘC";
				break;
			}
			return str;
		}
		return str;
	}

	public static void main(String[] args) {
		int can10 = 0, chi12 = 0;
		for (int i = 0; i < 60; i++) {
			System.out.println(UTF8Tool.coDau2KoDau(CAN[can10++] + CHI[chi12++]));
			if (can10 >= 10) can10 = 0;
			if (chi12 >= 12) chi12 = 0;
		}
	}
}
